<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8"/>
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
        <title>AJ MCP SDK/MCP Client SDK 安装与配置</title>
        <meta name="description" content="轻量级的 Java 8 Model Context Protocol (MCP) SDK. MCP Client SDK 安装与配置"/>
        <meta name="keywords" content="mcp, mcp sdk, java mcp, mcp client, mcp server, java8 mcp, 安装与配置"/>
        <meta name="viewport" content="width=device-width, initial-scale=1"/>
        <link rel="stylesheet" href="/asset/style/main.css"/>
        <link rel="icon" type="image/png" href="/asset/favicon.ico"/>
        <script src="/asset/common.js"></script>
    </head>
    <body>
        <nav>
            <div>
                <div class="links">
                    <a href="/">🏠 首页</a>
                    | ⚙️ 源码:
                    <a target="_blank" href="https://github.com/lightweight-component/aj-mcp">Github</a>/<a target="_blank" href="https://gitcode.com/lightweight-component/aj-mcp">Gitcode</a>
                    |
                    <a href="/">英文版本</a>
                </div>
                <h1>AJ MCP SDK</h1>
                <h3>用户手册</h3>
            </div>
        </nav>
        <div>
            <menu>
                
                <ul>
                    <li class="selected">
                        <a href="/cn">首页</a>
                    </li>
                    <li>
                        <a href="/architecture/index-cn">架构原理</a>
                    </li>
                </ul>
                <h3>MCP 客户端 SDK</h3>
                <ul>
                    <li>
                        <a href="/client/setup-client-cn">安装与配置</a>
                    </li>
                    <li>
                       <a href="/client/initialization-cn">初始化</a>
                    </li>
                    <li>
                       <a href="/client/resource-cn">Resources 用法</a>
                    </li>
                     <li>
                       <a href="/client/prompt-cn">Prompts 用法</a>
                    </li>
                     <li>
                       <a href="/client/tool-cn">Tools 用法</a>
                    </li>
                </ul>
                <h3>MCP 服务端 SDK</h3>
                <ul>
                      <li>
                           <a href="/server/usage-server-cn">Server SDK 用法指南</a>
                      </li>
                      <li>
                           <a href="/server/res-server-cn">Resources 用法</a>
                      </li>
                      <li>
                           <a href="/server/pro-server-cn">Prompts 用法</a>
                      </li>
                      <li>
                             <a href="/server/tool-server-cn">Tools 用法</a>
                       </li>
                      <li>
                         <a href="/server/sample-cn">整合例子</a>
                      </li>
                </ul>

                <h3>其他</h3>
                <ul>
                    <li><a href="/misc/versions">版本记录</a></li>
                    <li><a href="/misc/contact-cn">联系方式</a></li>
                </ul>
            </menu>
            <article>
                <h1>MCP 客户端 SDK 设置</h1>
<h2>安装依赖</h2>
<p>我们需要使用 AJ MCP SDK 来进行 API 请求。安装依赖如下：</p>
<pre><code class="language-xml">
&lt;dependency&gt;
    &lt;groupId&gt;com.ajaxjs&lt;/groupId&gt;
    &lt;artifactId&gt;aj-mcp-client&lt;/artifactId&gt;
    &lt;version&gt;1.3&lt;/version&gt;
&lt;/dependency&gt;
</code></pre>
<p>您可以通过以下链接找到最新版本：
<a href="https://central.sonatype.com/artifact/com.ajaxjs/aj-mcp-client"><img src="https://img.shields.io/maven-central/v/com.ajaxjs/aj-mcp-client?label=Latest%20Release" alt="Maven Central"></a></p>
<p>客户端 SDK 的实现由两个主要组件组成：</p>
<ul>
<li><strong>传输层</strong>：管理子进程并处理底层消息交换。</li>
<li><strong>MCP 客户端</strong>：提供高层次的 API，使用传输层实现 MCP 协议。</li>
</ul>
<h2>设置传输层 Transport</h2>
<p>首先，我们需要创建传输层。根据 MCP 服务器的类型，您可以选择以下两种传输方式之一：</p>
<h3>标准输入输出（Stdio）传输</h3>
<p>“Stdio” 是标准输入/输出的缩写，通常用于在程序和人之间通过命令行交互。在这里，它用于 MCP 客户端和 MCP 服务器之间的交互。通常，Stdio 用于本地应用程序，如 <code>*.exe</code> 程序或 Java Jar 程序等。</p>
<pre><code class="language-java">// MCP 服务器是一个 Java 程序，使用标准输入输出运行。
McpTransport transport=StdioTransport.builder()
        .command(Arrays.asList(&quot;java&quot;,&quot;-jar&quot;,&quot;C:\\app\\my-app-jar-with-dependencies.jar&quot;))
        .logEvents(true)
        .build();
</code></pre>
<p>以下是一个 <code>.exe</code> 程序的示例：</p>
<pre><code class="language-java">// MCP 服务器是一个可执行程序，使用标准输入输出运行。
McpTransport transport=StdioTransport.builder()
        .command(&quot;C:\\app\\my-app.exe&quot;,&quot;-token&quot;,&quot;dd4df2sx32ds&quot;))
        .logEvents(true)
        .build();
</code></pre>
<p>如果您希望查看客户端的完整日志，可以将 <code>logEvents</code> 设置为 <code>true</code>。这种方法有助于调试或更深入地理解 MCP 协议的基于 JSON 的消息格式。</p>
<h3>SSE 传输</h3>
<p>SSE（Server-Sent Events）传输使用 HTTP 协议实现 MCP 客户端与服务器之间的双向通信。这种传输方法特别适用于基于 Web 的应用程序。</p>
<pre><code class="language-java">McpTransport transport=HttpMcpTransport.builder()
        .sseUrl(&quot;http://localhost:8080/sse&quot;)
        .logRequests(true)
        .logResponses(true)
        .build();
</code></pre>
<p><code>SseUrl</code> 是必需的，它指定了 MCP 服务器监听传入连接的 SSE 端点 URL。</p>
<h2>MCP 客户端</h2>
<p>MCP 客户端充当本地应用程序与远程工具实现之间的桥梁。</p>
<pre><code class="language-java">McpClient mcpClient=McpClient.builder()
        .clientName(&quot;my-host&quot;)
        .clientVersion(&quot;1.2&quot;)
        .transport(transport)
        .build();
</code></pre>
<p>通常我们会填写 <code>clientName</code> 和 <code>clientVersion</code> 属性：</p>
<ul>
<li><code>clientName</code> 属性用于向 MCP 服务器标识客户端。</li>
<li><code>clientVersion</code> 属性用于指示客户端的版本。</li>
</ul>
<p>所有属性如下所示：</p>
<table>
<thead>
<tr>
<th>属性</th>
<th>说明</th>
<th>值类型</th>
<th>示例值</th>
</tr>
</thead>
<tbody>
<tr>
<td>clientName</td>
<td>设置客户端在初始化消息中向 MCP 服务器标识自己的名称。</td>
<td>String</td>
<td>myapp/foo-app</td>
</tr>
<tr>
<td>clientVersion</td>
<td>设置客户端在初始化消息中向 MCP 服务器标识自己的版本字符串。默认值为 &quot;1.0&quot;。</td>
<td>String</td>
<td>1.0/2.1.2</td>
</tr>
<tr>
<td>protocolVersion</td>
<td>设置客户端在初始化消息中声明的协议版本。当前默认值为 &quot;2024-11-05&quot;，但在后续版本中可能会有所更改。</td>
<td>String</td>
<td>2024-11-05</td>
</tr>
<tr>
<td>requestTimeout</td>
<td>设置工具执行的超时时间。此值适用于每个工具执行。默认值为 60 秒，值为 0 表示没有超时。</td>
<td>Duration</td>
<td><code>Duration.ofSeconds(60)</code></td>
</tr>
</tbody>
</table>
<p>请注意，在创建 McpClient 后，应立即调用 <code>mcpClient.initialize();</code>。关于初始化工作将在下一小节介绍。</p>
<pre><code class="language-java">McpClient mcpClient=McpClient.builder()
        .clientName(&quot;my-host&quot;)
        .clientVersion(&quot;1.2&quot;)
        .transport(sseTransport)
        .build();

        mcpClient.initialize();
</code></pre>
<p>最后，请记得在不再需要 MCP 客户端时，通过调用 <code>close()</code> 方法或使用自动关闭资源的方式来释放客户端资源。</p>
<pre><code class="language-java">try(IMcpClient mcpClient2=McpClient.builder().transport(transport).build()) {
     ...
}catch(Exception e){
     throw new RuntimeException(e);
}
</code></pre>
<p>MCP 客户端遵循分层架构，接口定义与实现之间有清晰的分离。客户端依赖传输层与服务器进行实际通信，并抽象通信细节以支持不同的传输机制。</p>
<style>
table th:nth-child(2) {
 min-width: 400px;
}
table th:nth-child(3), table td:nth-child(3) {
 min-width: 120px!important;
 width: 120px;
}

table td:nth-child(2) {
 text-align: left;
}
</style>

                <div id="comment-holder">
                </div>
            </article>
        </div>
        <footer>
             AJ-Util，开源框架 <a href="https://framework.ajaxjs.com" target="_blank">AJ-Framework</a> 的一部分。联系方式：
             frank@ajaxjs.com，<a href="https://blog.csdn.net/zhangxin09" target="_blank">作者博客</a>
             <br />
             <br />
             Copyright © 2025 Frank Cheung. All rights reserved.
         </footer>
    </body>
</html>